/*
* @(#)GroupFigure.java 5.1
*
*/
package CH.ifa.draw.figures;
import java.awt.Point;
import java.awt.Rectangle;
import java.util.Vector;
import CH.ifa.draw.framework.FigureEnumeration;
import CH.ifa.draw.framework.Handle;
import CH.ifa.draw.standard.CompositeFigure;
import CH.ifa.draw.standard.FigureEnumerator;
import CH.ifa.draw.standard.RelativeLocator;
/**
* A Figure that groups a collection of figures.
*/
public class GroupFigure extends CompositeFigure {
/*
* Serialization support.
*/
private static final long serialVersionUID = 8311226373023297933L;
private int groupFigureSerializedDataVersion = 1;
/**
* GroupFigures cannot be connected
*/
public boolean canConnect() {
return false;
}
/**
* Gets the display box. The display box is defined as the union
* of the contained figures.
*/
public Rectangle displayBox() {
FigureEnumeration k = figures();
Rectangle r = k.nextFigure().displayBox();
while (k.hasMoreElements())
r.add(k.nextFigure().displayBox());
return r;
}
public void basicDisplayBox(Point origin, Point corner) {
// do nothing
// we could transform all components proportionally
}
public FigureEnumeration decompose() {
return new FigureEnumerator(fFigures);
}
/**
* Gets the handles for the GroupFigure.
*/
public Vector<Handle> handles() {
Vector<Handle> handles = new Vector<Handle>();
handles.addElement(new GroupHandle(this, RelativeLocator.northWest()));
handles.addElement(new GroupHandle(this, RelativeLocator.northEast()));
handles.addElement(new GroupHandle(this, RelativeLocator.southWest()));
handles.addElement(new GroupHandle(this, RelativeLocator.southEast()));
return handles;
}
/**
* Sets the attribute of all the contained figures.
*/
public void setAttribute(String name, Object value) {
super.setAttribute(name, value);
FigureEnumeration k = figures();
while (k.hasMoreElements())
k.nextFigure().setAttribute(name, value);
}
}